/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package workingsafe;

import dominio.Accidente;
import dominio.AreaDeRiesgo;
import dominio.FactorDeRiesgo;
import java.util.ArrayList;
import java.util.Iterator;
import manejadores.ManejoArchivos;

/**
 *
 * @author Administrador
 */

public class Sistema {
    
    private static ArrayList<String> listaImpactosAccidente;
    
    private static ArrayList<String> listaNivelCapacitacion;
    
    //private static ArrayList<Double> coordenadasAreaZonaRiesgo;
    
    private static ArrayList<FactorDeRiesgo> listaFactoresDeRiesgo;
    
    private static ManejoArchivos mj;    
    
    private ArrayList<String> coordenadasAreaRiesgo;
    
    private static boolean areaPorGeoloc;
    
    private ArrayList<String> listaEdificios;
    private ArrayList<String> listaPlantas;
    private ArrayList<String> listaSectores;
    private ArrayList<String> listaOrientacion;

          
    public Sistema(){
        mj = new ManejoArchivos();
        
        listaImpactosAccidente = new ArrayList<String>();
        listaImpactosAccidente.add("Sin heridas");
        listaImpactosAccidente.add("Heridas leves - Sin hospitalizacion");
        listaImpactosAccidente.add("Heridas leves - Necesita hospitalizacion");
        listaImpactosAccidente.add("Heridas graves");
        listaImpactosAccidente.add("Fallecimiento");
        
        listaNivelCapacitacion = new ArrayList<String>();
        listaNivelCapacitacion.add("Inicial");
        listaNivelCapacitacion.add("Principiante");
        listaNivelCapacitacion.add("Intermedio");
        listaNivelCapacitacion.add("Avanzado");
        listaNivelCapacitacion.add("Experto");
        
        listaEdificios = new ArrayList<String>();
        listaEdificios.add("Edificio 1");
        listaEdificios.add("Edificio 2");
        listaEdificios.add("Edificio 3");
        listaEdificios.add("Edificio 4");
        listaEdificios.add("Edificio 5");
        listaPlantas = new ArrayList<String>();
        listaPlantas.add("Planta 1");
        listaPlantas.add("Planta 2");
        listaPlantas.add("Planta 3");
        listaPlantas.add("Planta 4");
        
        listaSectores = new ArrayList<String>();
        listaSectores.add("Laboratorio");
        listaSectores.add("Depósito de aceite");
        listaSectores.add("Sala de motores");
        listaSectores.add("Sala de calderas");
        listaSectores.add("Sala de material radioactivo");
        listaOrientacion = new ArrayList<String>();
        listaOrientacion.add("Norte");
        listaOrientacion.add("Noreste");
        listaOrientacion.add("Este");
        listaOrientacion.add("Sureste");
        listaOrientacion.add("Sur");
        listaOrientacion.add("Suroeste");
        listaOrientacion.add("Oeste");
        listaOrientacion.add("Noroeste");
        listaOrientacion.add("Centro");        
        
        //coordenadasAreaZonaRiesgo = new ArrayList<Double>();
        listaFactoresDeRiesgo = this.ObtenerFactoresDeRiesgo();
        coordenadasAreaRiesgo = new ArrayList<String>();
        areaPorGeoloc = false;
    }    
    
    /**
     * @return the areaPorGeoloc
     */
    public boolean isAreaPorGeoloc() {
        return areaPorGeoloc;
    }

    /**
     * @param aAreaPorGeoloc the areaPorGeoloc to set
     */
    public void setAreaPorGeoloc(boolean aAreaPorGeoloc) {
        areaPorGeoloc = aAreaPorGeoloc;
    }
    /**
     * @return the listaImpactosAccidente
     */
    public ArrayList<String> getListaImpactosAccidente() {
        return listaImpactosAccidente;
    }

    /**
     * @param aListaImpactosAccidente the listaImpactosAccidente to set
     */
    public void setListaImpactosAccidente(ArrayList<String> aListaImpactosAccidente) {
        setListaImpactosAccidente(aListaImpactosAccidente);
    }
    
    /**
     * @return the listaNivelCapacitacion
     */
    public ArrayList<String> getListaNivelCapacitacion() {
        return listaNivelCapacitacion;
    }

    /**
     * @param aListaNivelCapacitacion the listaNivelCapacitacion to set
     */
    public void setListaNivelCapacitacion(ArrayList<String> aListaNivelCapacitacion) {
        setListaNivelCapacitacion(aListaNivelCapacitacion);
    }
    
    /**
     * @return the coordenadasAreaZonaRiesgo
     */
//    public ArrayList<Double> getCoordenadasAreaZonaRiesgo() {
//        return coordenadasAreaZonaRiesgo;
//    }
//
//    /**
//     * @param aCoordenadasAreaZonaRiesgo the coordenadasAreaZonaRiesgo to set
//     */
//    public void setCoordenadasAreaZonaRiesgo(ArrayList<Double> aCoordenadasAreaZonaRiesgo) {
//        coordenadasAreaZonaRiesgo = aCoordenadasAreaZonaRiesgo;
//    }
//    
//    public void agregarCoordenada(String coord){
//        coordenadasAreaRiesgo.add(coord);
//    }
    
    /**
     * @return the listaFactoresDeRiesgo
     */
    public ArrayList<FactorDeRiesgo> getListaFactoresDeRiesgo() {
        return listaFactoresDeRiesgo;
    }

    /**
     * @param aListaFactoresDeRiesgo the listaFactoresDeRiesgo to set
     */
    public void setListaFactoresDeRiesgo(ArrayList<FactorDeRiesgo> aListaFactoresDeRiesgo) {
        listaFactoresDeRiesgo = aListaFactoresDeRiesgo;
    }
    
    public boolean ExisteIdAreaRiesgo (String id){
        boolean retorno = false;        
        Iterator<AreaDeRiesgo> iter = this.ObtenerAreasDeRiesgo().iterator();
        while(iter.hasNext() && !retorno) {            
            retorno = id.equals(iter.next().getIdAreaRiesgo());
        }
        return retorno;        
    }
    
    public boolean ExisteNombreAreaRiesgo(String nombre){
        boolean retorno = false;
        Iterator<AreaDeRiesgo> iter = this.ObtenerAreasDeRiesgo().iterator();
        while(iter.hasNext() && !retorno) {
            retorno = nombre.equals(iter.next().getNombre());
        }
        return retorno;        
    }
    
    public boolean ExisteIdFactorRiesgo(String id){
        boolean retorno = false;
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext() && !retorno) {
            FactorDeRiesgo idF = iter.next();
            System.out.println("Factor Id: " + idF.getIdFactor() + " y "+id);
            retorno = id.equals(idF.getIdFactor());
            System.out.println("retorno: "+ retorno);
        }
        return retorno;        
    }
    
    public boolean ExisteNombreFactorRiesgo(String nombre){
        boolean retorno = false;
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext() && !retorno) {
            FactorDeRiesgo nombreF = iter.next();
            System.out.println("Factor Nombre: " + nombreF.getNombreFactor() + " y "+nombre);
            retorno = nombre.equals(nombreF.getNombreFactor());
        }
        return retorno;  
        
    }
    
    public boolean ExisteAccidente(String idAcc){
        boolean retorno = false;
        Iterator<Accidente> iter = this.ObtenerAccidentes().iterator();
        while(iter.hasNext() && !retorno) {
            Accidente acc = iter.next();
            retorno = idAcc.equals(acc.getIdAccidente());
        }
        return retorno;
    }
    
    public ArrayList<FactorDeRiesgo> ObtenerFactoresDeRiesgo(){
        return mj.CargarFactoresDeRiesgo();
    }
    
    public FactorDeRiesgo ObtenerFactorDeRiesgoDesdeId(String id){
        FactorDeRiesgo fRet = null;
        boolean termine = false;
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext() && !termine) {
            fRet = iter.next();
            if(id.equals(fRet.getIdFactor())){                
                termine = true;
            }
        }
        
        return fRet; 
    }
    
    public FactorDeRiesgo ObtenerFactorDeRiesgoDesdeNombre(String nombre){
        FactorDeRiesgo fRet = null;
        boolean termine = false;
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext() && !termine) {
            fRet = iter.next();
            if(nombre.equals(fRet.getNombreFactor())){                
                termine = true;
            }
        }
        return fRet;     
    }
    
    public ArrayList<AreaDeRiesgo> ObtenerAreasDeRiesgo(){
        return mj.CargarAreasDeRiesgo();
    }
    
    public ArrayList<String> ObtenerIdsAreasDeRiesgo(){
        ArrayList<String> listaIds = new ArrayList<String>();
        Iterator<AreaDeRiesgo> iter = this.ObtenerAreasDeRiesgo().iterator();
        while(iter.hasNext()){
            listaIds.add(iter.next().getIdAreaRiesgo());
        }
        return listaIds;
    }
    
    public ArrayList<String> ObtenerNombresAreasDeRiesgo(){
        ArrayList<String> listaNombres = new ArrayList<String>();
        Iterator<AreaDeRiesgo> iter = this.ObtenerAreasDeRiesgo().iterator();
        while(iter.hasNext()){
            listaNombres.add(iter.next().getNombre());
        }
        return listaNombres;
    }
    
    
    ArrayList<String> ObtenerIdsFactoresDeRiesgo() {
        ArrayList<String> listaIds = new ArrayList<String>();
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext()){
            listaIds.add(iter.next().getIdFactor());
        }
        return listaIds;
    }

    ArrayList<String> ObtenerNombresFactoresDeRiesgo() {
        ArrayList<String> listaNombres = new ArrayList<String>();
        Iterator<FactorDeRiesgo> iter = this.getListaFactoresDeRiesgo().iterator();
        while(iter.hasNext()){
            listaNombres.add(iter.next().getNombreFactor());
        }
        return listaNombres;
    }
    
    private ArrayList<Accidente> ObtenerAccidentes() {
        return mj.CargarAccidentes();
    }
    
    public void GuardarAreaRiesgo(String idArea, String nombre, String nivel, String factores){
        AreaDeRiesgo area = new AreaDeRiesgo(idArea, nombre, nivel, factores);
        area.setDefinidoPorGeoloc(areaPorGeoloc);
        area.setAreaDefinida(coordenadasAreaRiesgo);
        //String area = idArea+";"+nombre+";"+nivel+";"+factores;
        mj.GuardarAreaRiesgoEnArchivo(area.toString());
    }
    
    public void GuardarAccidente(String idAcc, String area, String fecha, String hora, String totalInvolucrados, ArrayList<String> impactoPersonas){
        String accidente = idAcc+";"+area+";"+fecha+";"+hora+";"+totalInvolucrados+";";
        Iterator<String> iter = impactoPersonas.iterator();
        while(iter.hasNext()){
            accidente = accidente + iter.next() + "#";
        }
        mj.GuardarAccidenteEnArchivo(accidente);
    }    

    /**
     * @return the coordenadasAreaRiesgo
     */
    public ArrayList<String> getCoordenadasAreaRiesgo() {
        return coordenadasAreaRiesgo;
    }

    /**
     * @param coordenadasAreaRiesgo the coordenadasAreaRiesgo to set
     */
    public void setCoordenadasAreaRiesgo(ArrayList<String> coordenadasAreaRiesgo) {
        this.coordenadasAreaRiesgo = coordenadasAreaRiesgo;
    }

    public void agregarCoordenadaAreaRiesgo(String coordenada){
        this.coordenadasAreaRiesgo.add(coordenada);
    }
    
    public void vaciarCoordenadasAreaRiesgo(){
        this.coordenadasAreaRiesgo.clear();
    }

    void borrarUltimaCoordenadaAreaRiesgo() {
        this.coordenadasAreaRiesgo.remove(coordenadasAreaRiesgo.size()-1);
    }

    /**
     * @return the listaEdificios
     */
    public ArrayList<String> getListaEdificios() {
        return listaEdificios;
    }

    /**
     * @param listaEdificios the listaEdificios to set
     */
    public void setListaEdificios(ArrayList<String> listaEdificios) {
        this.listaEdificios = listaEdificios;
    }

    /**
     * @return the listaPlantas
     */
    public ArrayList<String> getListaPlantas() {
        return listaPlantas;
    }

    /**
     * @param listaPlantas the listaPlantas to set
     */
    public void setListaPlantas(ArrayList<String> listaPlantas) {
        this.listaPlantas = listaPlantas;
    }

    /**
     * @return the listaSectores
     */
    public ArrayList<String> getListaSectores() {
        return listaSectores;
    }

    /**
     * @param listaSectores the listaSectores to set
     */
    public void setListaSectores(ArrayList<String> listaSectores) {
        this.listaSectores = listaSectores;
    }

    /**
     * @return the listaOrientacion
     */
    public ArrayList<String> getListaOrientacion() {
        return listaOrientacion;
    }

    /**
     * @param listaOrientacion the listaOrientacion to set
     */
    public void setListaOrientacion(ArrayList<String> listaOrientacion) {
        this.listaOrientacion = listaOrientacion;
    }
}
